// 全局变量，防止重复上传
let isUploading = false;
let logCounter = 0;
const MAX_LOG_ENTRIES = 15;

function logStatus(message) {
    // 限制日志条目数量
    logCounter++;
    const now = new Date().toLocaleTimeString();
    
    // 添加新日志
    const logEntry = `<div class="log-entry">${now}: ${message}</div>`;
    $('#statusContent').prepend(logEntry);
    
    // 如果日志条目过多，移除旧的
    if (logCounter > MAX_LOG_ENTRIES) {
        $('#statusContent').find('div.log-entry:gt(' + (MAX_LOG_ENTRIES - 1) + ')').remove();
    }
    
    console.log(`[STATUS] ${message}`);
}

// 防止重复触发的工具函数
function debounce(func, wait) {
    let timeout;
    return function() {
        const context = this, args = arguments;
        clearTimeout(timeout);
        timeout = setTimeout(function() {
            func.apply(context, args);
        }, wait);
    };
}

$(document).ready(function() {
    logStatus('页面加载完成');
    
    // 清除日志按钮
    $('<button class="btn btn-sm btn-outline-secondary mt-2">清除日志</button>')
        .prependTo('#uploadStatus')
        .on('click', function() {
            $('#statusContent').html('日志已清除');
            logCounter = 0;
        });
    
    // 方法1处理
    $('#uploadBtn1').on('click', debounce(function() {
        if (isUploading) {
            logStatus('正在上传中，请等待...');
            return;
        }
        
        const files = $('#fileInput1')[0].files;
        if (files.length === 0) {
            logStatus('方法1: 请先选择文件');
            return;
        }
        
        logStatus(`方法1: 选择了${files.length}个文件，开始上传`);
        uploadFiles(files, '方法1');
    }, 300));
    
    // 方法2处理 - 使用debounce防止频繁触发
    $('#uploadArea2').on('click', debounce(function(e) {
        e.preventDefault();
        e.stopPropagation();
        
        if (isUploading) {
            logStatus('正在上传中，请等待...');
            return false;
        }
        
        logStatus('方法2: 区域被点击');
        $('#fileInput2').trigger('click');
        return false;
    }, 300));
    
    $('#fileInput2').on('change', function() {
        const files = this.files;
        if (files.length === 0) return;
        
        $('#status2').text(`已选择 ${files.length} 个文件`);
        logStatus(`方法2: 选择了${files.length}个文件，开始上传`);
        uploadFiles(files, '方法2');
    });
    
    // 方法3处理 - 添加拖拽功能
    const dragArea = $('#dragUploadArea');
    
    // 为拖拽区域添加label功能
    dragArea.on('click', function() {
        $('#fileInput3').trigger('click');
    });
    
    // 处理拖拽事件
    dragArea.on('dragover', function(e) {
        e.preventDefault();
        e.stopPropagation();
        $(this).addClass('dragover');
    });
    
    dragArea.on('dragleave', function(e) {
        e.preventDefault();
        e.stopPropagation();
        $(this).removeClass('dragover');
    });
    
    dragArea.on('drop', function(e) {
        e.preventDefault();
        e.stopPropagation();
        $(this).removeClass('dragover');
        
        if (isUploading) {
            logStatus('正在上传中，请等待...');
            return;
        }
        
        const dt = e.originalEvent.dataTransfer;
        const files = dt.files;
        
        if (files.length === 0) return;
        
        $('#status3').text(`已选择 ${files.length} 个文件`);
        logStatus(`拖拽上传: 选择了${files.length}个文件，开始上传`);
        uploadFiles(files, '拖拽上传');
    });
    
    // 原有的点击选择文件的处理
    $('#fileInput3').on('change', function() {
        if (isUploading) {
            logStatus('正在上传中，请等待...');
            return;
        }
        
        const files = this.files;
        if (files.length === 0) return;
        
        $('#status3').text(`已选择 ${files.length} 个文件`);
        logStatus(`方法3: 选择了${files.length}个文件，开始上传`);
        uploadFiles(files, '方法3');
    });
});

// 共用上传函数
function uploadFiles(files, method) {
    // 设置上传状态标志
    isUploading = true;
    let completedUploads = 0;
    const totalFiles = files.length;
    
    logStatus(`开始上传 ${totalFiles} 个文件 (${method})`);
    
    // 创建进度条
    const progressBar = $('<div class="progress mt-2 mb-2"><div class="progress-bar" role="progressbar" style="width: 0%;" aria-valuenow="0" aria-valuemin="0" aria-valuemax="100">0%</div></div>');
    $('#statusContent').prepend(progressBar);
    
    for (let i = 0; i < files.length; i++) {
        const file = files[i];
        const formData = new FormData();
        formData.append('file', file);
        
        logStatus(`准备上传(${i+1}/${totalFiles}): ${file.name} (${formatFileSize(file.size)})`);
        
        $.ajax({
            url: '/upload',
            type: 'POST',
            data: formData,
            processData: false,
            contentType: false,
            success: function(response) {
                completedUploads++;
                
                // 更新进度条
                const progress = Math.round((completedUploads / totalFiles) * 100);
                progressBar.find('.progress-bar').css('width', progress + '%').attr('aria-valuenow', progress).text(progress + '%');
                
                if (response.success) {
                    logStatus(`上传成功(${completedUploads}/${totalFiles}): ${file.name}`);
                } else {
                    logStatus(`上传失败(${completedUploads}/${totalFiles}): ${file.name} - ${response.message || '未知错误'}`);
                }
                
                // 检查是否所有文件都上传完成
                if (completedUploads === totalFiles) {
                    isUploading = false;
                    logStatus(`所有文件上传完成 (${method})`);
                }
            },
            error: function(xhr, status, error) {
                completedUploads++;
                
                // 更新进度条
                const progress = Math.round((completedUploads / totalFiles) * 100);
                progressBar.find('.progress-bar').css('width', progress + '%').attr('aria-valuenow', progress).text(progress + '%');
                
                logStatus(`上传错误(${completedUploads}/${totalFiles}): ${file.name} - ${error}`);
                console.error('上传错误详情:', xhr.responseText);
                
                // 检查是否所有文件都上传完成
                if (completedUploads === totalFiles) {
                    isUploading = false;
                    logStatus(`所有文件上传完成 (${method})`);
                }
            }
        });
    }
}

// 辅助函数
function formatFileSize(bytes) {
    if (bytes < 1024) return bytes + ' bytes';
    else if (bytes < 1048576) return (bytes / 1024).toFixed(2) + ' KB';
    else return (bytes / 1048576).toFixed(2) + ' MB';
} 